package com.dhcc.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dhcc.api.R;
import com.dhcc.entity.SysApiPerm;
import com.dhcc.service.SysApiPermService;
import com.dhcc.support.Condition;
import com.dhcc.support.Query;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 接口管理控制层接口
 * @ProjectName Dhcc-Cloud
 * @PackageName com.dhcc.controller
 * @Title SysApiPermController
 * @Date 2024/12/25 20:21
 * @Author LiuGuoting
 */
@RestController
@RequestMapping("/sys/apiPerm")
public class SysApiPermController {

    /**
     * 接口权限服务接口
     */
    @Resource
    private SysApiPermService sysApiPermService;

    /**
     * 分页查询接口权限
     *
     * @param sysApiPerm 接口权限实体对象
     * @param query 分页查询参数
     * @return 分页查询结果
     */
    @GetMapping("/page")
    public R<IPage<SysApiPerm>> page(SysApiPerm sysApiPerm, Query query) {
        return R.data(sysApiPermService.page(Condition.getPage(query), sysApiPerm));
    }
    /**
     * 获取所有接口权限列表
     *
     * @return 接口权限列表
     */
    @GetMapping("/list")
    public R<List<SysApiPerm>> list() {
        return R.data(sysApiPermService.listAll());
    }

    /**
     * 新增接口权限
     *
     * @param sysApiPerm 接口权限实体对象
     * @return 操作结果
     */
    @PostMapping("/add")
    public R<Boolean> add(@RequestBody SysApiPerm sysApiPerm) {
        return R.status(sysApiPermService.addSysApiPerm(sysApiPerm), "新增接口权限失败，请重试！");
    }

    /**
     * 查询接口权限详情
     *
     * @param apiPermId 接口权限ID
     * @return 接口权限详情
     */
    @GetMapping("/detail")
    public R<SysApiPerm> info(@RequestParam("apiPermId") String apiPermId) {
        SysApiPerm sysApiPermDetail = sysApiPermService.getSysApiPermById(apiPermId);
        if (sysApiPermDetail == null) {
            return R.fail("接口权限不存在");
        }
        return R.data(sysApiPermDetail);
    }

    /**
     * 修改接口权限信息
     *
     * @param sysApiPerm 接口权限实体对象
     * @return 操作结果
     */
    @PostMapping("/update")
    public R<Boolean> update(@RequestBody SysApiPerm sysApiPerm) {
        return R.status(sysApiPermService.updateSysApiPerm(sysApiPerm), "修改接口权限失败，请重试！");
    }

    /**
     * 删除接口权限
     *
     * @param params 接口权限ID
     * @return 操作结果
     */
    @PostMapping("/delete")
    public R<Boolean> delete(@RequestBody Map<String, String> params) {
        // 从Map中获取apiPermId值，并转换为Long类型
        String apiPermId = params.get("apiPermId");
        if (apiPermId == null) {
            return R.fail("接口权限ID不能为空");
        }
        return R.status(sysApiPermService.deleteByIdLogic(apiPermId), "删除接口权限失败，请重试！");
    }

    /**
     * 批量删除接口权限
     *
     * @param ids 接口权限ID列表
     * @return 操作结果
     */
    @PostMapping("/deleteBatch")
    public R<Boolean> deleteBatch(@RequestBody List<String> ids) {
        return R.status(sysApiPermService.deleteBatchByIdsLogic(ids), "批量删除接口权限失败，请重试！");
    }

    /**
     * 更改接口权限状态
     *
     * @param sysApiPerm 接口权限对象实体
     * @return 操作结果
     */
    @PostMapping("/updateStatus")
    public R<Boolean> updateStatus(@RequestBody SysApiPerm sysApiPerm) {
        return R.status(sysApiPermService.updateStatus(sysApiPerm.getId(), sysApiPerm.getStatus()), "更改接口权限状态失败！");
    }

    /**
     * 批量更改接口权限状态
     *
     * @param ids 接口权限ID列表
     * @param newStatus 新状态
     * @return 操作结果
     */
    @PostMapping("/updateStatusBatch")
    public R<Boolean> updateStatusBatch(@RequestBody List<String> ids, int newStatus) {
        return R.status(sysApiPermService.updateStatusBatch(ids, newStatus), "批量更改接口权限状态失败！");
    }
}
